# encoding=utf-8
from pydot import Dot, Edge
from grafo import Grafo

class GrafoPydot( Grafo ):
    def __init__( self , grafo ):
        self._grafo = grafo
        self._grafo_dot = self.converter_para_dot()

    def converter_para_dot( self ):
        if self._grafo.e_direcionado:
            dot_graph = Dot( graph_type = 'digraph', suppress_disconnected = False, simplify = True )
        else:
            dot_graph = Dot( graph_type = 'graph', suppress_disconnected = False, simplify = True )

        graph_dict = self._grafo.conv_para_dic()
        if not self._grafo.e_direcionado:
            adicionados = []
            for chave in graph_dict.keys():
                for subnoh in graph_dict[chave]:
                    foi_adicionado = False
                    for elem in adicionados:
                        if subnoh in elem and chave in elem:
                            foi_adicionado = True
                            break
                    if foi_adicionado == False:
                        dot_graph.add_edge( Edge( str( chave ), str( subnoh ) ) )
                        adicionados.append( set( [chave, subnoh] ) )
        else:
            for chave in graph_dict.keys():
                for subnoh in graph_dict[chave]:
                    dot_graph.add_edge( Edge( str( chave ), str( subnoh ) ) )
        return dot_graph

    def escrever(self):
        self._grafo_dot.write( 'grafo.dot' )
